package com.example.demo.filter2;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import java.io.IOException;

/**
 * @ClassName TestFilter1
 * @Description: 修改请联系我，否则请勿随意修改  通过@Bean来配置
 * @Author ChenYuan
 * @Date 2021/4/30
 * @Version V1.0
 **/
@Slf4j
//@WebFilter(urlPatterns = {"/user/info","/user/put"})
//@WebFilter(urlPatterns = {"/user/put"})
//@Order(3)  //预期order值越小，过滤器越靠前，此处配置无效
//@Configuration  与 在 Demo上加 @ServletComponentScan(basePackages = {"com.example.demo.filter"}) 效果一样
@Component
public class TestFilter4 implements Filter {

//    @Autowired
//    private User user;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
//        user.setAge(12);
        log.info("##############"+this.getClass().getName()+"初始化完成！"+"##############");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //在DispatcherServlet之前执行
        log.info("############## "+this.getClass().getName()+"  doFilter2 before##############");
        filterChain.doFilter(servletRequest, servletResponse);
        // 在视图页面返回给客户端之前执行，但是执行顺序在Interceptor之后  如果你直接在controller上使用@RestController返回了json 也就是不走视图渲染的一步 下面是不会执行的;
        log.info("############## "+this.getClass().getName()+"  doFilter2 after##############");
    }

    @Override
    public void destroy() {
        log.info("##############"+this.getClass().getName()+"初始化完成！"+"##############");
    }
}
